package jukebox.model.common;
/**
 * 페이징 처리를 위한 비즈니스 객체
  */
public class PagingBean {
	/**
	 * 현재 페이지에 보여줄 게시물 수
	 */
	private int nowPage=1;
	private int numberOfContentsPerPage=CommonConstants.CONTENT_NUMBER_PER_PAGE;//한페이지당 게시물 수 5
	/**
	 * 페이지 그룹당 페이지 수
	 */
	private int numberOfPageGroup=CommonConstants.PAGE_NUMBER_PER_PAGEGROUP;//그룹당 페이지 수4
	/**
	 * 현재 db에 저장된 총 게시물 수
	 */
	private int totalContents;
	/**
	 * 검색할 단어
	 */
	private String title;
	
	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public PagingBean(int totalContents, int nowPage, String title) {
		super();
		this.nowPage = nowPage;
		this.totalContents = totalContents;
		this.title = title;
	}

	public PagingBean() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "PagingBean [nowPage=" + nowPage + ", numberOfContentsPerPage="
				+ numberOfContentsPerPage + ", numberOfPageGroup="
				+ numberOfPageGroup + ", totalContents=" + totalContents
				+ ", title=" + title + "]";
	}

	public int getNumberOfContentsPerPage() {
		return numberOfContentsPerPage;
	}




	public void setNumberOfContentsPerPage(int numberOfContentsPerPage) {
		this.numberOfContentsPerPage = numberOfContentsPerPage;
	}




	public int getTotalContents() {
		return totalContents;
	}




	public void setTotalContents(int totalContents) {
		this.totalContents = totalContents;
	}




	public void setNowPage(int nowPage) {
		this.nowPage = nowPage;
	}




	public void setNumberOfPageGroup(int numberOfPageGroup) {
		this.numberOfPageGroup = numberOfPageGroup;
	}




	/**
	 * DAO(db)로 부터 총 게시물 수를 반환받아 setting
	 * 현재 페이지는 client(jsp)로부터 받아 setting
	 * (현재 페이지 값이 없으면 1로 처리)
	 * @param totalContents
	 */
	public PagingBean(int totalContents) {
		super();
		this.totalContents = totalContents;
	}

	


	public int getNumberOfPageGroup() {
		return numberOfPageGroup;
	}




	/**
	 * DAO(db)로 부터 총 게시물 수를 반환받아 setting
	 * 현재 페이지는 client(jsp)로부터 받아 setting
	 * (현재 페이지 값이 없으면 1로 처리)
	 * @param nowPage
	 * @param totalContents
	 */
	public PagingBean(int totalContents, int nowPage) {
		super();
		this.totalContents = totalContents;
		this.nowPage = nowPage;
	}
	
/**
 * 현재 페이지 반환
 * @return
 */
	public int getNowPage() {
		return nowPage;
	}
	
	/**
	 * 총 페이지 수를 return한다. 
	 * 1. 전체 데이터(게시물) % 한 페이지에 보여줄 데이터 개수 == 0 이면 둘을 / 값이 총 페이지 수 
	 * 2. 전체 데이터(게시물) % 한 페이지에 보여줄 데이터 개수 => 0보다 크면 
	 * 		둘을 / 값에 +1을 한 값이 총 페이지 수 게시물수 1 2 3 4 5 6 7 8 9 10 11 12 
	 * 		1페이지 1~5  2페이지 6~10 3페이지 11 
	 * 		ex) 게시물 32 개 , 페이지당 게시물수 5개 -> 7 페이지
	 * @return
	 */
	public int getTotalPage(){
		int num=totalContents%numberOfContentsPerPage;
		int totalpage=0;
		if(num==0){
			totalpage=totalContents/numberOfContentsPerPage;
		}else{
			totalpage=totalContents/numberOfContentsPerPage+1;
		}	
		return totalpage;
	}
	
	/**
	 * 총 페이지 그룹의 수를 return한다. 
	 * 1. 총 페이지수 % 그룹당 페이지수 == 0 이면 둘을 / 값이 총 페이지 수 
	 * 2. 총 페이지수 % 그룹당 페이지수 => 0보다 크면 둘을 / 값에 +1을 한 값이 총 페이지 수 
	 * ex) 총 게시물 수 23 개 총 페이지 ? 총 페이지 그룹수 ? 
	 * 페이지 1 2 3 4 5 페이지그룹 1234(1그룹) 5(2그룹)
	 */
	public int getTotalPageGroup(){
		int totalPageGroup=0;
		int num=this.getTotalPage()%this.numberOfPageGroup;
		
		if(num==0){
			totalPageGroup=this.getTotalPage()/this.numberOfPageGroup;
			}else{
			totalPageGroup=this.getTotalPage()/this.numberOfPageGroup+1;
			}
		
		return totalPageGroup;
	}
	
	/**
	 * 현재 페이지의 그룹 번호(몇 번째 페이지 그룹인지) 을 return 하는 메소드 
	 * 1. 현재 페이지 % 그룹당 페이지수 == 0 이면 둘을 / 값이 현재 페이지 그룹. 
	 * 2. 현재 페이지 % 그룹당 페이지수 => 0 크면 둘을 / 값에 +1을 한 값이 현재 페이지 그룹 
	 * 	1 2 3 4 5 6 7 8 9 10
	 * @return
	 */
	public int getNowPageGroup(){
		int nowPageGroup =0;
		int num=this.getNowPage()%numberOfPageGroup;
		
		if(num==0){
			nowPageGroup=this.getNowPage()/numberOfPageGroup;
		}else{
			nowPageGroup=this.getNowPage()/numberOfPageGroup+1;
		}		
		return nowPageGroup;
		
	}
	
	/**
	 * 현재 페이지의 그룹의 시작 페이지 번호를 return 한다. 
	 * 1. 그룹내 페이지수*(현재 페이지 그룹 -1) + 1을 한 값이 첫 페이지이다. 
	 *    (페이지 그룹*페이지 그룹 개수 이 그 그룹의 마지막 번호이므로) 
	 * 2. 위의 계산 결과가 0인 경우는 첫페이지 이므로 1을 return 한다. 
	 * 페이지 그룹 1 2 3 4 -> 5 6 7 8 -> 9 10
	 * @return
	 */
	public int getStartPageOfPageGroup(){
		int startPageOfPageGroup=0;
		int num=numberOfPageGroup*(this.getNowPageGroup()-1)+1;
		
		if(num==0){
			startPageOfPageGroup=1;
		}else{
			startPageOfPageGroup=numberOfPageGroup*(this.getNowPageGroup()-1)+1;
		}
		return startPageOfPageGroup;
	}
	
	/**
	 * 현재그룹의 마지막 페이지를 return 한다. 
	 * 1. 현재 페이지 그룹 * 페이지 그룹 개수 가 마지막 번호이다. 
	 * 2. 그 그룹의 마지막 페이지 번호가 전체 페이지의 마지막 페이지 번호보다 큰 경우는
	 * 	  전체 페이지의 마지막 번호를 return 한다. 
	 * 	1 2 3 4 -> 5 6 7 8 -> 9 10
	 * @return
	 */
	public int getEndPageOfPageGroup(){
		int endPageOfPageGroup=0;
		int num=this.getNowPageGroup()*numberOfPageGroup;//현 페이지의 마지막번호
		if(num>this.getTotalPage()){
			endPageOfPageGroup=this.getTotalPage();
		}else{
			endPageOfPageGroup=this.getNowPageGroup()*numberOfPageGroup;
		}
		
		return endPageOfPageGroup;
	}
	
	/**
	 * 이전 페이지 그룹이 있는지 체크하는 메서드 
	 * 현재 페이지가 속한 페이지 그룹이 1보다 크면 true 
	 * ex ) 페이지 1 2 3 4 / 5 6 7 8 / 9 10 1 2 3 group
	 * @return
	 */
	public boolean isPreviousPageGroup(){
		boolean previousPageGroup=false;
		
		if(this.getNowPageGroup()>1){
			previousPageGroup=true;
	}		
		return previousPageGroup;
		
	}
	
	/**
	 * 다음 페이지 그룹이 있는지 체크하는 메서드 
	 * 현재 페이지 그룹이 마지막 페이지 그룹( 마지막 페이지 그룹 == 총 페이지 그룹 수) 보다 작으면 true 
	 *  ex ) 페이지 1 2 3 4 / 5 6 7 8 / 9 10 1 2 3 group
	 * @return
	 */
	public boolean isNextPageGroup(){
		boolean nextPageGroup=false;
		
		if(this.getNowPageGroup()<this.getTotalPageGroup()){
			nextPageGroup=true;
		}
		
		return nextPageGroup;
		
		
	}
	
	
	
	public static void main(String args[]){
		
		 PagingBean p=new PagingBean(47);

		  // 전체 페이지 수 : 10
		  System.out.println("getTotalPage:"+p.getTotalPage());    
		
		  // 전체 페이지 그룹 수 : 3
		  System.out.println("getTotalPageGroup:"+p.getTotalPageGroup()); 
		  p=new PagingBean(31,6);// 게시물수 31 현재 페이지 6

		  // 현재 페이지 그룹 : 2 
		  System.out.println("getNowPageGroup:"+p.getNowPageGroup());

		  // 페이지 그룹의 시작 페이지 : 5
		  System.out.println("getStartPageOfPageGroup:"+p.getStartPageOfPageGroup());

		  // 페이지 그룹의 마지막 페이지 : 7
		  System.out.println("getEndPageOfPageGroup:"+p.getEndPageOfPageGroup());

		  // 이전 페이지 그룹이 있는 지 : true
		  System.out.println("isPreviousPageGroup:"+p.isPreviousPageGroup());

		  // 다음 페이지 그룹이 있는 지 : false
		  System.out.println("isNextPageGroup:"+p.isNextPageGroup());
	}
}
